package IOStreamTest.Homework;

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

/*
1、请使用序列化和反序列化机制，完成学生信息管理系统。
系统打开时显示以下信息：
欢迎使用学生信息管理系统，请认真阅读以下使用说明：
请输入不同的功能编号来选择不同的功能：
[1]查看学生列表
[2]保存学生
[3]删除学生
[4]查看某个学生详细信息
--------------------------------------------------------------------
学生信息列表展示
学号			姓名			性别
------------------------------------
1			zhangsan		男
2			lisi			女
--------------------------------------------------------------------
查看某个学生详细信息
学号：1
姓名：张三
生日：1990-10-10
性别：男
邮箱：zhangsan@123.com
---------------------------------------------------------------------
删除学生时，需要让用户继续输入删除的学生编号，根据编号删除学生。
注意：请使用序列化和反序列化，以保证关闭之后，学生数据不丢失。
学生数据要存储到文件中。
 */
public class Test1 {
    public static void main(String[] args) {
        Manage manage = isManage();
        Scanner s = new Scanner(System.in);
        System.out.println("欢迎使用学生信息管理系统，请认真阅读以下使用说明：");
        System.out.println("请输入不同的功能编号来选择不同的功能：\n" +
                            "[1]查看学生列表\n" +
                            "[2]保存学生\n" +
                            "[3]删除学生\n" +
                            "[4]查看某个学生详细信息\n"+
                            "[其他数字]退出系统");
        while(true){
            System.out.println("请输入编号:");
            int num = s.nextInt();
            switch(num){
                case 1:
                    manage.showList();
                    break;
                case 2:
                    System.out.println("请输入学生信息:学号,姓名,性别,邮箱");
                    int id = s.nextInt();
                    String name = s.next();
                    boolean sex = s.nextBoolean();
                    String eMail = s.next();
                    manage.saveStudent(new Student(id,name,sex,eMail));
                    break;
                case 3:
                    System.out.println("请输入要删除的学生学号:");
                    int id1 = s.nextInt();
                    manage.deleteStudent(id1);
                    break;
                case 4:
                    System.out.println("请输入要查看的学生学号:");
                    int id2 = s.nextInt();
                    manage.showStudent(id2);
                    break;
                default:
                    serialize(manage);
                    System.out.println("登出成功!");
                    return;
            }
        }
    }
    /*
     * @description: 判断序列化资源文件是否存在
     * @return: IOStreamTest.Homework.Manage
     * @author: 申继旺
     * @time: 2022/10/31 21:24
     */
    private static Manage isManage(){
        File file = new File("src\\IOStreamTest\\Homework\\manage");
        if(file.exists()){
            ObjectInputStream ois = null;
            try {
                ois = new ObjectInputStream(new FileInputStream("src\\IOStreamTest\\Homework\\manage"));
                Object o = ois.readObject();
                return (Manage) o;
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } finally{
                if (ois != null) {
                    try {
                        ois.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return new Manage();
    }
    /*
     * @description: 序列化Manage对象，以保证关闭之后，学生数据不丢失。学生数据要存储到文件中。
    * @param manage
     * @return: void
     * @author: 申继旺
     * @time: 2022/10/31 21:39
     */
    private static void serialize(Manage manage){
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("src\\IOStreamTest\\Homework\\manage"));
            oos.writeObject(manage);
            oos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if (oos != null) {
                try {
                    oos.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
class Student implements Serializable {
    private static final long serialVersionUID = -1038410616645990643L;
    private int id;
    private String name;
    private boolean sex;
    private String eMail;
    public Student() {
    }

    public Student(int id, String name, boolean sex, String eMail) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.eMail = eMail;
    }

    public String getEMail() {
        return eMail;
    }

    public void setEMail(String eMail) {
        this.eMail = eMail;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isSex() {
        return sex;
    }

    public void setSex(boolean sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "学号:"+this.id+"\n"+"姓名:"+this.name+"\n"+"性别:"+(this.sex?"男":"女")+"\n"+"邮箱:"+this.eMail;
    }

}